package com.dsl.dslsuzhou.mapper;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * 设备数据访问层
 */
@Repository
@Slf4j
public class DeviceRepository {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    /**
     * 根据条件查询设备ID集合
     */
    public List<String> findDeviceIdsByConditions(String category, String area, String building, String floor) {
        StringBuilder sql = new StringBuilder();
        List<Object> params = new ArrayList<>();
        
        // 基础查询SQL - 通过fact_device_energy表关联设备与位置信息
        sql.append("SELECT DISTINCT d.device_id ");
        sql.append("FROM dim_device d ");
//        sql.append("INNER JOIN fact_device_energy f ON d.device_id = f.device_id ");
//        sql.append("INNER JOIN dim_floor fl ON f.floor_id = fl.floor_id ");
//        sql.append("INNER JOIN dim_building b ON fl.building_id = b.building_id ");
//        sql.append("INNER JOIN dim_area a ON b.area_id = a.area_id ");
        sql.append("WHERE 1=1 ");
        
        // 设备类别条件（必填）
        if (StringUtils.hasText(category)) {
            sql.append("AND d.device_category = ? ");
            params.add(category);
        }
        
        // 区域条件（选填）
        if (StringUtils.hasText(area)) {
            sql.append("AND a.area_name = ? ");
            params.add(area);
        }
        
        // 楼栋条件（选填）
        if (StringUtils.hasText(building)) {
            sql.append("AND b.building_name = ? ");
            params.add(building);
        }
        
        // 楼层条件（选填）
        if (StringUtils.hasText(floor)) {
            sql.append("AND fl.floor_name = ? ");
            params.add(floor);
        }
        
        // 排序
        sql.append("ORDER BY d.device_id");
        
        log.info("执行设备ID查询SQL: {}, 参数: {}", sql.toString(), params);
        
        return jdbcTemplate.queryForList(sql.toString(), params.toArray(), String.class);
    }
}
